#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
运行应用脚本
用于初始化数据库并启动Flask服务
"""

import os
from app import app, db
from models import DailyRecord, HealthThreshold
from datetime import datetime, date
import random

# 检查是否存在instance目录，如果不存在则创建
if not os.path.exists('instance'):
    os.makedirs('instance')

print("正在初始化数据库...")

with app.app_context():
    # 创建所有表
    db.create_all()
    print("数据库表创建成功!")
    
    # 检查是否需要生成测试数据
    record_count = DailyRecord.query.count()
    if record_count == 0:
        print("未发现数据，正在生成测试数据...")
        
        # 生成3个测试用户的健康数据
        person_ids = ['user_001', 'user_002', 'user_003']
        
        for person_id in person_ids:
            # 为每个用户生成30天的测试数据
            for i in range(30):
                record_date = date.today() - timedelta(days=29-i)
                
                # 生成随机但合理的健康指标数据
                record = DailyRecord(
                    person_id=person_id,
                    date=record_date,
                    activity_score=random.uniform(20, 80),  # 活动分数 20-80
                    glucose_mean=random.uniform(4.5, 7.5),  # 血糖均值 4.5-7.5 mmol/L
                    adl=random.uniform(0.6, 1.0),  # 日常生活能力 0.6-1.0
                    sleep_quality=random.uniform(0.5, 0.95),  # 睡眠质量 0.5-0.95
                    exercise_freq=random.uniform(0.2, 0.8),  # 运动频率 0.2-0.8
                    diet_score=random.uniform(0.5, 0.9)  # 饮食评分 0.5-0.9
                )
                db.session.add(record)
            
            # 为用户创建默认阈值配置
            threshold = HealthThreshold(
                person_id=person_id,
                glucose_threshold=7.0,
                min_activity_score=30.0,
                min_adl_score=0.7,
                min_sleep_quality=0.6,
                min_exercise_freq=0.3,
                min_diet_score=0.6
            )
            db.session.add(threshold)
        
        db.session.commit()
        print(f"测试数据生成完成! 创建了 {len(person_ids)} 个用户，每个用户30天的记录")
    else:
        print(f"数据库中已有 {record_count} 条记录")

print("\n数据库初始化完成!")
print("\n现在启动Flask服务...")
print("访问地址: http://0.0.0.0:5000/")
print("API文档:")
print("  POST   /upload      - 上传健康数据文件")
print("  GET    /data        - 获取用户健康数据")
print("  GET    /predict     - 预测未来2天血糖")
print("  GET    /alert       - 检查健康预警")
print("  POST   /threshold   - 设置用户健康阈值")
print("  GET    /threshold   - 获取用户健康阈值")
print("\n按 Ctrl+C 停止服务")

if __name__ == '__main__':
    # 运行Flask服务
    app.run(host='0.0.0.0', port=5000, debug=True)